<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>珠峰架构师成长计划</title>
    <link rel="stylesheet" type="text/css" href="../static/css/main.css">
</head>
<body>
<div class="nav">
    <div class="logo">
        
            珠峰架构师成长计划
        
    </div>
<ul><li><a href="../index.html">0.Async</a></li><li><a href="../html/0.editor.html">0.editor</a></li><li><a href="../html/0.module.html">0.module</a></li><li><a href="../html/1.ES2015.html">1.ES2015</a></li><li><a href="../html/2.Promise.html">2.Promise</a></li><li><a href="../html/3.Node.html">3.Node</a></li><li><a href="../html/4.NodeInstall.html">4.NodeInstall</a></li><li><a href="../html/5.REPL.html">5.REPL</a></li><li><a href="../html/6.NodeCore.html">6.NodeCore</a></li><li><a href="../html/7.module&NPM.html">7.module&NPM</a></li><li><a href="../html/8.Encoding.html">8.Encoding</a></li><li><a href="../html/9.Buffer.html">9.Buffer</a></li><li><a href="../html/10.fs.html">10.fs</a></li><li><a href="../html/11.Stream-1.html">11.Stream-1</a></li><li><a href="../html/11.Stream-2.html">11.Stream-2</a></li><li><a href="../html/11.Stream-3.html">11.Stream-3</a></li><li><a href="../html/11.Stream-4.html">11.Stream-4</a></li><li><a href="../html/12-Network-2.html">12-Network-2</a></li><li><a href="../html/12.NetWork-3.html">12.NetWork-3</a></li><li><a href="../html/12.Network-1.html">12.Network-1</a></li><li><a href="../html/13.tcp.html">13.tcp</a></li><li><a href="../html/14.http-1.html">14.http-1</a></li><li><a href="../html/14.http-2.html">14.http-2</a></li><li><a href="../html/15.compress.html">15.compress</a></li><li><a href="../html/16.crypto.html">16.crypto</a></li><li><a href="../html/17.process.html">17.process</a></li><li><a href="../html/18.yargs.html">18.yargs</a></li><li><a href="../html/19.cache.html">19.cache</a></li><li><a href="../html/20.action.html">20.action</a></li><li><a href="../html/21.https.html">21.https</a></li><li><a href="../html/22.cookie.html">22.cookie</a></li><li><a href="../html/23.session.html">23.session</a></li><li><a href="../html/24.express-1.html">24.express-1</a></li><li><a href="../html/24.express-2.html">24.express-2</a></li><li><a href="../html/24.express-3.html">24.express-3</a></li><li><a href="../html/24.express-4.html">24.express-4</a></li><li><a href="../html/25.koa-1.html">25.koa-1</a></li><li><a href="../html/26.webpack-1-basic.html">26.webpack-1-basic</a></li><li><a href="../html/26.webpack-2-optimize.html">26.webpack-2-optimize</a></li><li><a href="../html/26.webpack-3.tapable.html">26.webpack-3.tapable</a></li><li><a href="../html/26.webpack-4-AST.html">26.webpack-4-AST</a></li><li><a href="../html/26.webpack-5-source.html">26.webpack-5-source</a></li><li><a href="../html/26.webpack-6-loader.html">26.webpack-6-loader</a></li><li><a href="../html/26.webpack-7-plugin.html">26.webpack-7-plugin</a></li><li><a href="../html/26.webpack-8-hand.html">26.webpack-8-hand</a></li><li><a href="../html/27.react-1.html">27.react-1</a></li><li><a href="../html/27.react-2.html">27.react-2</a></li><li><a href="../html/27.react-3.html">27.react-3</a></li><li><a href="../html/27.react-4-immutable.html">27.react-4-immutable</a></li><li><a href="../html/27.react-5-react-dom-diff.html">27.react-5-react-dom-diff</a></li><li><a href="../html/27.react-6.html">27.react-6</a></li><li><a href="../html/28.react-mobx.html">28.react-mobx</a></li><li><a href="../html/28.redux-0.html">28.redux-0</a></li><li><a href="../html/28.redux-1.html">28.redux-1</a></li><li><a href="../html/28.redux-2-中间件.html">28.redux-2-中间件</a></li><li><a href="../html/28.redux-3-saga.html">28.redux-3-saga</a></li><li><a href="../html/28.redux-jwt-back.html">28.redux-jwt-back</a></li><li><a href="../html/28.redux-jwt-front.html">28.redux-jwt-front</a></li><li><a href="../html/29.mongodb-1.html">29.mongodb-1</a></li><li><a href="../html/29.mongodb-2.html">29.mongodb-2</a></li><li><a href="../html/29.mongodb-3.html">29.mongodb-3</a></li><li><a href="../html/29.mongodb-4.html">29.mongodb-4</a></li><li><a href="../html/29.mongodb-5.html">29.mongodb-5</a></li><li><a href="../html/29.mongodb-6.html">29.mongodb-6</a></li><li><a href="../html/30.cms-1-mysql.html">30.cms-1-mysql</a></li><li><a href="../html/30.cms-2-mysql.html">30.cms-2-mysql</a></li><li><a href="../html/30.cms-3-mysql.html">30.cms-3-mysql</a></li><li><a href="../html/30.cms-4-egg.html">30.cms-4-egg</a></li><li><a href="../html/30.cms-5-api.html">30.cms-5-api</a></li><li><a href="../html/30.cms-6-roadhog.html">30.cms-6-roadhog</a></li><li><a href="../html/30.cms-7-umi.html">30.cms-7-umi</a></li><li><a href="../html/30.cms-8-dva.html">30.cms-8-dva</a></li><li><a href="../html/30.cms-9-dva.html">30.cms-9-dva</a></li><li><a href="../html/30.cms-10-front.html">30.cms-10-front</a></li><li><a href="../html/30.cms-11-deploy.html">30.cms-11-deploy</a></li><li><a href="../html/33.redis.html">33.redis</a></li><li><a href="../html/34.unittest.html">34.unittest</a></li><li><a href="../html/35.jwt.html">35.jwt</a></li><li><a href="../html/36.websocket-1.html">36.websocket-1</a></li><li><a href="../html/36.websocket-2.html">36.websocket-2</a></li><li><a href="../html/38.chat-api-1.html">38.chat-api-1</a></li><li><a href="../html/38.chat-api-2.html">38.chat-api-2</a></li><li><a href="../html/38.chat-3.html">38.chat-3</a></li><li><a href="../html/38.chat-api-3.html">38.chat-api-3</a></li><li><a href="../html/38.chat.html">38.chat</a></li><li><a href="../html/38.chat2.html">38.chat2</a></li><li><a href="../html/38.chat2.html">38.chat2</a></li><li><a href="../html/39.crawl-0.html">39.crawl-0</a></li><li><a href="../html/39.crawl-1.html">39.crawl-1</a></li><li><a href="../html/39.crawl-2.html">39.crawl-2</a></li><li><a href="../html/40.deploy.html">40.deploy</a></li><li><a href="../html/41.safe.html">41.safe</a></li><li><a href="../html/42.test.html">42.test</a></li><li><a href="../html/43.nginx.html">43.nginx</a></li><li><a href="../html/44.enzyme.html">44.enzyme</a></li><li class="active"><a href="../html/45.docker.html">45.docker</a></li><li><a href="../html/46.elastic.html">46.elastic</a></li><li><a href="../html/47.oauth.html">47.oauth</a></li><li><a href="../html/48.wxpay.html">48.wxpay</a></li><li><a href="../html/49.nunjucks.html">49.nunjucks</a></li><li><a href="../html/50.ketang.html">50.ketang</a></li><li><a href="../html/index.html">index</a></li><li><a href="../html/51.typescript.html">51.typescript</a></li><li><a href="../html/52.UML.html">52.UML</a></li><li><a href="../html/53.design.html">53.design</a></li><li><a href="../html/index.html">index</a></li><li><a href="../html/54.linux.html">54.linux</a></li><li><a href="../html/55.yaml.html">55.yaml</a></li><li><a href="../html/50.ketang2.html">50.ketang2</a></li><li><a href="../html/56.ts.html">56.ts</a></li><li><a href="../html/57.ts_react.html">57.ts_react</a></li><li><a href="../html/58.react-ssr.html">58.react-ssr</a></li><li><a href="../html/59.react-ssr.html">59.react-ssr</a></li></ul></div>


<div class="warpper">

    <div class="page-toc">
        <ul><li><a href="#t01. 布署软件的问题">1. 布署软件的问题</a></li><li><a href="#t12. 虚拟机">2. 虚拟机</a></li><li><a href="#t23. Linux 容器">3. Linux 容器</a></li><li><a href="#t34. Docker 是什么">4. Docker 是什么</a></li><li><a href="#t45. Docker 的安装">5. Docker 的安装</a></li><li><a href="#t56. Docker架构">6. Docker架构</a></li><li><a href="#t67.阿里云加速">7.阿里云加速</a></li><li><a href="#t78. image">8. image</a><ul><li><a href="#t88.1 查看镜像">8.1 查看镜像</a></li><li><a href="#t98.2 查找镜像">8.2 查找镜像</a></li><li><a href="#t108.3 拉取镜像">8.3 拉取镜像</a></li><li><a href="#t118.4 删除镜像">8.4 删除镜像</a></li></ul></li><li><a href="#t129. 容器">9. 容器</a><ul><li><a href="#t139.1 命令">9.1 命令</a></li><li><a href="#t149.2 启动容器">9.2 启动容器</a></li><li><a href="#t159.3 查看容器">9.3 查看容器</a></li><li><a href="#t169.4 运行交互式的容器">9.4 运行交互式的容器</a></li><li><a href="#t179.5 后台运行容器">9.5 后台运行容器</a></li><li><a href="#t189.6 kill">9.6 kill</a></li><li><a href="#t199.7 删除容器">9.7 删除容器</a></li><li><a href="#t209.8 启动容器">9.8 启动容器</a></li><li><a href="#t219.9 停止容器">9.9 停止容器</a></li><li><a href="#t229.10 进入一个容器">9.10 进入一个容器</a></li><li><a href="#t239.11 进入一个正在运行中的容器">9.11 进入一个正在运行中的容器</a></li><li><a href="#t249.12 拷贝文件">9.12 拷贝文件</a></li><li><a href="#t259.13 自动删除">9.13 自动删除</a></li></ul></li><li><a href="#t2610. 制作个性化镜像">10. 制作个性化镜像</a></li><li><a href="#t2711. 制作Dockerfile">11. 制作Dockerfile</a><ul><li><a href="#t2811.1 编写Dockerfile">11.1 编写Dockerfile</a></li><li><a href="#t2911.2 .dockerignore">11.2 .dockerignore</a></li><li><a href="#t3011.3 Dockerfile">11.3 Dockerfile</a><ul><li><a href="#t3111.3.1 安装node">11.3.1 安装node</a></li><li><a href="#t3211.3.2 安装express项目生成器">11.3.2 安装express项目生成器</a></li><li><a href="#t3311.3.3  Dockerfile">11.3.3  Dockerfile</a></li></ul></li><li><a href="#t3411.4 创建image">11.4 创建image</a></li><li><a href="#t3511.5 使用新的镜像运行容器">11.5 使用新的镜像运行容器</a></li><li><a href="#t3611.6 CMD">11.6 CMD</a></li><li><a href="#t3711.7 发布image">11.7 发布image</a></li></ul></li><li><a href="#t3812 数据盘">12 数据盘</a><ul><li><a href="#t3912.1 默认数据盘">12.1 默认数据盘</a></li><li><a href="#t4012.2 指定数据盘">12.2 指定数据盘</a></li><li><a href="#t4112.3 指定数据盘容器">12.3 指定数据盘容器</a></li><li><a href="#t4212.4  管理数据盘">12.4  管理数据盘</a></li></ul></li><li><a href="#t4312. 网络">12. 网络</a><ul><li><a href="#t4412.1 bridge">12.1 bridge</a></li><li><a href="#t4512.2 none">12.2 none</a></li><li><a href="#t4612.3 host">12.3 host</a></li><li><a href="#t4712.4 访问桥接网络里面的服务">12.4 访问桥接网络里面的服务</a></li><li><a href="#t4812.5 查看主机绑定的端口">12.5 查看主机绑定的端口</a></li><li><a href="#t4912.6 指向主机的随机端口">12.6 指向主机的随机端口</a></li><li><a href="#t5012.7 创建自定义网络">12.7 创建自定义网络</a></li><li><a href="#t5112.8 制定网络">12.8 制定网络</a></li></ul></li><li><a href="#t5213.compose">13.compose</a><ul><li><a href="#t5313.1 docker-compose.yml">13.1 docker-compose.yml</a></li><li><a href="#t5413.2  nginx工具包">13.2  nginx工具包</a></li><li><a href="#t5513.3 启动">13.3 启动</a></li><li><a href="#t5613.4 配置网络">13.4 配置网络</a></li><li><a href="#t5713.5 配置数据卷">13.5 配置数据卷</a></li><li><a href="#t5813.6 配置根目录">13.6 配置根目录</a></li></ul></li><li><a href="#t5914. nodeapp">14. nodeapp</a><ul><li><a href="#t6014.1 服务">14.1 服务</a></li><li><a href="#t6114.2 结构">14.2 结构</a></li><li><a href="#t6214.3 docker-compose.yml">14.3 docker-compose.yml</a></li><li><a href="#t6314.4 其它文件">14.4 其它文件</a><ul><li><a href="#t6414.4.1 app/web/server.js">14.4.1 app/web/server.js</a></li><li><a href="#t6514.4.2 package.json">14.4.2 package.json</a></li><li><a href="#t6614.4.3 images/node/Dockerfile">14.4.3 images/node/Dockerfile</a></li><li><a href="#t6714.4.4 images/nginx/config/default.conf">14.4.4 images/nginx/config/default.conf</a></li></ul></li></ul></li><li><a href="#t6815. 参考">15. 参考</a></li></ul>
    </div>
    
    <div class="content markdown-body">
        <h2 id="t01. &#x5E03;&#x7F72;&#x8F6F;&#x4EF6;&#x7684;&#x95EE;&#x9898;">1. &#x5E03;&#x7F72;&#x8F6F;&#x4EF6;&#x7684;&#x95EE;&#x9898; <a href="#t01. &#x5E03;&#x7F72;&#x8F6F;&#x4EF6;&#x7684;&#x95EE;&#x9898;"> # </a></h2>
<ul>
<li>&#x5982;&#x679C;&#x60F3;&#x8BA9;&#x8F6F;&#x4EF6;&#x8FD0;&#x884C;&#x8D77;&#x6765;&#x8981;&#x4FDD;&#x8BC1;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x8BBE;&#x7F6E;&#xFF0C;&#x5404;&#x79CD;&#x5E93;&#x548C;&#x7EC4;&#x4EF6;&#x7684;&#x5B89;&#x88C5;&#x90FD;&#x662F;&#x6B63;&#x786E;&#x7684;</li>
<li>&#x70ED;&#x5E26;&#x9C7C;&amp;&#x51B7;&#x6C34;&#x9C7C; &#x51B7;&#x6C34;&#x9C7C;&#x9002;&#x5E94;&#x7684;&#x6C34;&#x6E29;&#x5728;5-30&#x5EA6;&#xFF0C;&#x800C;&#x70ED;&#x5E26;&#x9C7C;&#x53EA;&#x80FD;&#x9002;&#x5E94;22-30&#x5EA6;&#x6C34;&#x6E29;&#xFF0C;&#x4F4E;&#x4E8E;22&#x5EA6;&#x534A;&#x5C0F;&#x65F6;&#x5C31;&#x51BB;&#x6B7B;&#x4E86;</li>
</ul>
<h2 id="t12. &#x865A;&#x62DF;&#x673A;">2. &#x865A;&#x62DF;&#x673A; <a href="#t12. &#x865A;&#x62DF;&#x673A;"> # </a></h2>
<ul>
<li>&#x865A;&#x62DF;&#x673A;&#xFF08;virtual machine&#xFF09;&#x5C31;&#x662F;&#x5E26;&#x73AF;&#x5883;&#x5B89;&#x88C5;&#x7684;&#x4E00;&#x79CD;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;&#x5B83;&#x53EF;&#x4EE5;&#x5728;&#x4E00;&#x79CD;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x91CC;&#x9762;&#x8FD0;&#x884C;&#x53E6;&#x4E00;&#x79CD;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;<ul>
<li>&#x8D44;&#x6E90;&#x5360;&#x7528;&#x591A;</li>
<li>&#x5197;&#x4F59;&#x6B65;&#x9AA4;&#x591A;</li>
<li>&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x6162;</li>
</ul>
</li>
</ul>
<h2 id="t23. Linux &#x5BB9;&#x5668;">3. Linux &#x5BB9;&#x5668; <a href="#t23. Linux &#x5BB9;&#x5668;"> # </a></h2>
<ul>
<li>&#x7531;&#x4E8E;&#x865A;&#x62DF;&#x673A;&#x5B58;&#x5728;&#x8FD9;&#x4E9B;&#x7F3A;&#x70B9;&#xFF0C;Linux &#x53D1;&#x5C55;&#x51FA;&#x4E86;&#x53E6;&#x4E00;&#x79CD;&#x865A;&#x62DF;&#x5316;&#x6280;&#x672F;&#xFF1A;Linux &#x5BB9;&#x5668;&#xFF08;Linux Containers&#xFF0C;&#x7F29;&#x5199;&#x4E3A; LXC&#xFF09;&#x3002;</li>
<li>Linux &#x5BB9;&#x5668;&#x4E0D;&#x662F;&#x6A21;&#x62DF;&#x4E00;&#x4E2A;&#x5B8C;&#x6574;&#x7684;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF0C;&#x800C;&#x662F;&#x5BF9;&#x8FDB;&#x7A0B;&#x8FDB;&#x884C;&#x9694;&#x79BB;&#x3002;&#x6216;&#x8005;&#x8BF4;&#xFF0C;&#x5728;&#x6B63;&#x5E38;&#x8FDB;&#x7A0B;&#x7684;&#x5916;&#x9762;&#x5957;&#x4E86;&#x4E00;&#x4E2A;&#x4FDD;&#x62A4;&#x5C42;&#x3002;&#x5BF9;&#x4E8E;&#x5BB9;&#x5668;&#x91CC;&#x9762;&#x7684;&#x8FDB;&#x7A0B;&#x6765;&#x8BF4;&#xFF0C;&#x5B83;&#x63A5;&#x89E6;&#x5230;&#x7684;&#x5404;&#x79CD;&#x8D44;&#x6E90;&#x90FD;&#x662F;&#x865A;&#x62DF;&#x7684;&#xFF0C;&#x4ECE;&#x800C;&#x5B9E;&#x73B0;&#x4E0E;&#x5E95;&#x5C42;&#x7CFB;&#x7EDF;&#x7684;&#x9694;&#x79BB;&#x3002;<ul>
<li>&#x542F;&#x52A8;&#x5FEB;</li>
<li>&#x8D44;&#x6E90;&#x5360;&#x7528;&#x5C11;</li>
<li>&#x4F53;&#x79EF;&#x5C0F;</li>
</ul>
</li>
</ul>
<h2 id="t34. Docker &#x662F;&#x4EC0;&#x4E48;">4. Docker &#x662F;&#x4EC0;&#x4E48; <a href="#t34. Docker &#x662F;&#x4EC0;&#x4E48;"> # </a></h2>
<ul>
<li>Docker &#x5C5E;&#x4E8E; Linux &#x5BB9;&#x5668;&#x7684;&#x4E00;&#x79CD;&#x5C01;&#x88C5;&#xFF0C;&#x63D0;&#x4F9B;&#x7B80;&#x5355;&#x6613;&#x7528;&#x7684;&#x5BB9;&#x5668;&#x4F7F;&#x7528;&#x63A5;&#x53E3;&#x3002;&#x5B83;&#x662F;&#x76EE;&#x524D;&#x6700;&#x6D41;&#x884C;&#x7684; Linux &#x5BB9;&#x5668;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;</li>
<li>Docker &#x5C06;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x4E0E;&#x8BE5;&#x7A0B;&#x5E8F;&#x7684;&#x4F9D;&#x8D56;&#xFF0C;&#x6253;&#x5305;&#x5728;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x91CC;&#x9762;&#x3002;&#x8FD0;&#x884C;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x5C31;&#x4F1A;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x865A;&#x62DF;&#x5BB9;&#x5668;&#x3002;&#x7A0B;&#x5E8F;&#x5728;&#x8FD9;&#x4E2A;&#x865A;&#x62DF;&#x5BB9;&#x5668;&#x91CC;&#x8FD0;&#x884C;&#xFF0C;&#x5C31;&#x597D;&#x50CF;&#x5728;&#x771F;&#x5B9E;&#x7684;&#x7269;&#x7406;&#x673A;&#x4E0A;&#x8FD0;&#x884C;&#x4E00;&#x6837;</li>
</ul>
<h2 id="t45. Docker &#x7684;&#x5B89;&#x88C5;">5. Docker &#x7684;&#x5B89;&#x88C5; <a href="#t45. Docker &#x7684;&#x5B89;&#x88C5;"> # </a></h2>
<ul>
<li><a href="https://docs.docker.com/docker-for-mac/install/">Mac</a></li>
<li><a href="https://docs.docker.com/docker-for-windows/install/">windows</a></li>
<li><a href="https://docs.docker.com/install/linux/docker-ce/centos/">centos</a></li>
</ul>
<p>centos7.2&#x4E2D;&#x5B89;&#x88C5;docker</p>
<pre><code class="lang-js">yum -y install docker-io
</code></pre>
<p>&#x67E5;&#x770B;docker&#x7248;&#x672C;</p>
<pre><code class="lang-js">$ docker version
$ docker info
</code></pre>
<p>&#x542F;&#x52A8;docker&#x670D;&#x52A1;</p>
<pre><code class="lang-js">systemctl start docker
</code></pre>
<h2 id="t56. Docker&#x67B6;&#x6784;">6. Docker&#x67B6;&#x6784; <a href="#t56. Docker&#x67B6;&#x6784;"> # </a></h2>
<p><img src="http://img.zhufengpeixun.cn/docker-arch.jpg" alt="docker"></p>
<h2 id="t67.&#x963F;&#x91CC;&#x4E91;&#x52A0;&#x901F;">7.&#x963F;&#x91CC;&#x4E91;&#x52A0;&#x901F; <a href="#t67.&#x963F;&#x91CC;&#x4E91;&#x52A0;&#x901F;"> # </a></h2>
<ul>
<li><a href="https://dev.aliyun.com/search.html">&#x955C;&#x50CF;&#x4ED3;&#x5E93;</a></li>
<li><a href="https://cr.console.aliyun.com/?spm=5176.1971733.0.2.fAi0GG#/imageList">&#x7BA1;&#x7406;&#x4E2D;&#x5FC3;</a></li>
</ul>
<pre><code class="lang-js">mkdir -p /etc/docker
tee /etc/docker/daemon.json &lt;&lt;-<span class="hljs-string">&apos;EOF&apos;</span>
{
  <span class="hljs-string">&quot;registry-mirrors&quot;</span>: [<span class="hljs-string">&quot;https://fwvjnv59.mirror.aliyuncs.com&quot;</span>]
}
EOF
systemctl daemon-reload
systemctl restart docker
</code></pre>
<h2 id="t78. image">8. image <a href="#t78. image"> # </a></h2>
<ul>
<li>Docker &#x628A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x53CA;&#x5176;&#x4F9D;&#x8D56;&#xFF0C;&#x6253;&#x5305;&#x5728; image &#x6587;&#x4EF6;&#x91CC;&#x9762;&#x3002;&#x53EA;&#x6709;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x624D;&#x80FD;&#x751F;&#x6210; Docker &#x5BB9;&#x5668;</li>
<li>image &#x6587;&#x4EF6;&#x53EF;&#x4EE5;&#x770B;&#x4F5C;&#x662F;&#x5BB9;&#x5668;&#x7684;&#x6A21;&#x677F;</li>
<li>Docker &#x6839;&#x636E; image &#x6587;&#x4EF6;&#x751F;&#x6210;&#x5BB9;&#x5668;&#x7684;&#x5B9E;&#x4F8B;</li>
<li>&#x540C;&#x4E00;&#x4E2A; image &#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x4EE5;&#x751F;&#x6210;&#x591A;&#x4E2A;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x7684;&#x5BB9;&#x5668;&#x5B9E;&#x4F8B;</li>
<li>&#x4E00;&#x4E2A; image &#x6587;&#x4EF6;&#x5F80;&#x5F80;&#x901A;&#x8FC7;&#x7EE7;&#x627F;&#x53E6;&#x4E00;&#x4E2A; image &#x6587;&#x4EF6;&#xFF0C;&#x52A0;&#x4E0A;&#x4E00;&#x4E9B;&#x4E2A;&#x6027;&#x5316;&#x8BBE;&#x7F6E;&#x800C;&#x751F;&#x6210;</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">&#x547D;&#x4EE4;</th>
<th style="text-align:left">&#x542B;&#x4E49;</th>
<th style="text-align:left">&#x6848;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">images</td>
<td style="text-align:left">&#x67E5;&#x770B;&#x5168;&#x90E8;&#x955C;&#x50CF;</td>
<td style="text-align:left">docker image ls</td>
</tr>
<tr>
<td style="text-align:left">search</td>
<td style="text-align:left">&#x67E5;&#x627E;&#x955C;&#x50CF;</td>
<td style="text-align:left">docker search [imageName]</td>
</tr>
<tr>
<td style="text-align:left">pull</td>
<td style="text-align:left">&#x62C9;&#x53D6;&#x955C;&#x50CF;</td>
<td style="text-align:left">docker pull [imageName]</td>
</tr>
<tr>
<td style="text-align:left">rmi</td>
<td style="text-align:left">&#x5220;&#x9664;&#x955C;&#x50CF;</td>
<td style="text-align:left">docker rmi [imageName]</td>
</tr>
</tbody>
</table>
<h3 id="t88.1 &#x67E5;&#x770B;&#x955C;&#x50CF;">8.1 &#x67E5;&#x770B;&#x955C;&#x50CF; <a href="#t88.1 &#x67E5;&#x770B;&#x955C;&#x50CF;"> # </a></h3>
<pre><code class="lang-js">docker image ls
</code></pre>
<table>
<thead>
<tr>
<th style="text-align:left">&#x5B57;&#x6BB5;</th>
<th style="text-align:left">&#x542B;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">REPOSITORY</td>
<td style="text-align:left">&#x4ED3;&#x5E93;&#x5730;&#x5740;</td>
</tr>
<tr>
<td style="text-align:left">TAG</td>
<td style="text-align:left">&#x6807;&#x7B7E;</td>
</tr>
<tr>
<td style="text-align:left">IMAGE_ID</td>
<td style="text-align:left">&#x955C;&#x50CF;ID</td>
</tr>
<tr>
<td style="text-align:left">CREATED</td>
<td style="text-align:left">&#x521B;&#x5EFA;&#x65F6;&#x95F4;</td>
</tr>
<tr>
<td style="text-align:left">SIZE</td>
<td style="text-align:left">&#x955C;&#x50CF;&#x5927;&#x5C0F;</td>
</tr>
</tbody>
</table>
<h3 id="t98.2 &#x67E5;&#x627E;&#x955C;&#x50CF;">8.2 &#x67E5;&#x627E;&#x955C;&#x50CF; <a href="#t98.2 &#x67E5;&#x627E;&#x955C;&#x50CF;"> # </a></h3>
<pre><code class="lang-js">docker search ubuntu
</code></pre>
<table>
<thead>
<tr>
<th style="text-align:left">&#x5B57;&#x6BB5;</th>
<th style="text-align:left">&#x542B;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">NAME</td>
<td style="text-align:left">&#x540D;&#x79F0;</td>
</tr>
<tr>
<td style="text-align:left">DESCRIPTION</td>
<td style="text-align:left">&#x63CF;&#x8FF0;</td>
</tr>
<tr>
<td style="text-align:left">STARTS</td>
<td style="text-align:left">&#x661F;&#x661F;&#x7684;&#x6570;&#x91CF;</td>
</tr>
<tr>
<td style="text-align:left">OFFICIAL</td>
<td style="text-align:left">&#x662F;&#x5426;&#x5B98;&#x65B9;&#x6E90;</td>
</tr>
</tbody>
</table>
<h3 id="t108.3 &#x62C9;&#x53D6;&#x955C;&#x50CF;">8.3 &#x62C9;&#x53D6;&#x955C;&#x50CF; <a href="#t108.3 &#x62C9;&#x53D6;&#x955C;&#x50CF;"> # </a></h3>
<pre><code class="lang-js">docker  pull docker.io/hello-world
</code></pre>
<ul>
<li>docker image pull&#x662F;&#x6293;&#x53D6; image &#x6587;&#x4EF6;&#x7684;&#x547D;&#x4EE4;</li>
<li>docker.io/hello-world&#x662F; image &#x6587;&#x4EF6;&#x5728;&#x4ED3;&#x5E93;&#x91CC;&#x9762;&#x7684;&#x4F4D;&#x7F6E;&#xFF0C;&#x5176;&#x4E2D;<code>docker.io</code>&#x662F; image&#x7684;&#x4F5C;&#x8005;&#xFF0C;hello-world&#x662F; image &#x6587;&#x4EF6;&#x7684;&#x540D;&#x5B57;</li>
<li>Docker &#x5B98;&#x65B9;&#x63D0;&#x4F9B;&#x7684; image &#x6587;&#x4EF6;&#xFF0C;&#x90FD;&#x653E;&#x5728;<code>docker.io</code>&#x7EC4;&#x91CC;&#x9762;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x7684;&#x662F;&#x9ED8;&#x8BA4;&#x7EC4;&#xFF0C;&#x53EF;&#x4EE5;&#x7701;&#x7565; <code>docker image pull hello-world</code></li>
</ul>
<h3 id="t118.4 &#x5220;&#x9664;&#x955C;&#x50CF;">8.4 &#x5220;&#x9664;&#x955C;&#x50CF; <a href="#t118.4 &#x5220;&#x9664;&#x955C;&#x50CF;"> # </a></h3>
<pre><code class="lang-js">docker rmi  hello-world
</code></pre>
<h2 id="t129. &#x5BB9;&#x5668;">9. &#x5BB9;&#x5668; <a href="#t129. &#x5BB9;&#x5668;"> # </a></h2>
<ul>
<li><code>docker  run</code> &#x547D;&#x4EE4;&#x4F1A;&#x4ECE; <code>image</code> &#x6587;&#x4EF6;&#xFF0C;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x5BB9;&#x5668;&#x5B9E;&#x4F8B;&#x3002;</li>
<li>docker container run&#x547D;&#x4EE4;&#x5177;&#x6709;&#x81EA;&#x52A8;&#x6293;&#x53D6; image &#x6587;&#x4EF6;&#x7684;&#x529F;&#x80FD;&#x3002;&#x5982;&#x679C;&#x53D1;&#x73B0;&#x672C;&#x5730;&#x6CA1;&#x6709;&#x6307;&#x5B9A;&#x7684; image &#x6587;&#x4EF6;&#xFF0C;&#x5C31;&#x4F1A;&#x4ECE;&#x4ED3;&#x5E93;&#x81EA;&#x52A8;&#x6293;&#x53D6;</li>
<li>&#x8F93;&#x51FA;&#x63D0;&#x793A;&#x4EE5;&#x540E;&#xFF0C;hello world&#x5C31;&#x4F1A;&#x505C;&#x6B62;&#x8FD0;&#x884C;&#xFF0C;&#x5BB9;&#x5668;&#x81EA;&#x52A8;&#x7EC8;&#x6B62;&#x3002;</li>
<li>&#x6709;&#x4E9B;&#x5BB9;&#x5668;&#x4E0D;&#x4F1A;&#x81EA;&#x52A8;&#x7EC8;&#x6B62;</li>
<li>image &#x6587;&#x4EF6;&#x751F;&#x6210;&#x7684;&#x5BB9;&#x5668;&#x5B9E;&#x4F8B;&#xFF0C;&#x672C;&#x8EAB;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x79F0;&#x4E3A;&#x5BB9;&#x5668;&#x6587;&#x4EF6;</li>
<li>&#x5BB9;&#x5668;&#x751F;&#x6210;&#xFF0C;&#x5C31;&#x4F1A;&#x540C;&#x65F6;&#x5B58;&#x5728;&#x4E24;&#x4E2A;&#x6587;&#x4EF6;&#xFF1A; image &#x6587;&#x4EF6;&#x548C;&#x5BB9;&#x5668;&#x6587;&#x4EF6;</li>
<li>&#x5173;&#x95ED;&#x5BB9;&#x5668;&#x5E76;&#x4E0D;&#x4F1A;&#x5220;&#x9664;&#x5BB9;&#x5668;&#x6587;&#x4EF6;&#xFF0C;&#x53EA;&#x662F;&#x5BB9;&#x5668;&#x505C;&#x6B62;&#x8FD0;&#x884C;</li>
</ul>
<h3 id="t139.1 &#x547D;&#x4EE4;">9.1 &#x547D;&#x4EE4; <a href="#t139.1 &#x547D;&#x4EE4;"> # </a></h3>
<table>
<thead>
<tr>
<th style="text-align:left">&#x547D;&#x4EE4;</th>
<th style="text-align:left">&#x542B;&#x4E49;</th>
<th style="text-align:left">&#x6848;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">run</td>
<td style="text-align:left">&#x4ECE;&#x955C;&#x50CF;&#x8FD0;&#x884C;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;</td>
<td style="text-align:left">docker run ubuntu /bin/echo &apos;hello-world&apos;</td>
</tr>
<tr>
<td style="text-align:left">ps</td>
<td style="text-align:left">&#x67E5;&#x770B;&#x5F53;&#x524D;&#x8FD0;&#x884C;&#x7684;&#x5BB9;&#x5668;</td>
<td style="text-align:left">docker ps -a -l</td>
</tr>
<tr>
<td style="text-align:left">kill [containerId]</td>
<td style="text-align:left">&#x7EC8;&#x6B62;&#x5BB9;&#x5668;(&#x53D1;&#x9001;SIGKILL )</td>
<td style="text-align:left">docker kill [containerId]</td>
</tr>
<tr>
<td style="text-align:left">rm [containerId]</td>
<td style="text-align:left">&#x5220;&#x9664;&#x5BB9;&#x5668;</td>
<td style="text-align:left">docker rm [containerId]</td>
</tr>
<tr>
<td style="text-align:left">start [containerId]</td>
<td style="text-align:left">&#x542F;&#x52A8;&#x5DF2;&#x7ECF;&#x751F;&#x6210;&#x3001;&#x5DF2;&#x7ECF;&#x505C;&#x6B62;&#x8FD0;&#x884C;&#x7684;&#x5BB9;&#x5668;&#x6587;&#x4EF6;</td>
<td style="text-align:left">docker start [containerId]</td>
</tr>
<tr>
<td style="text-align:left">stop [containerId]</td>
<td style="text-align:left">&#x7EC8;&#x6B62;&#x5BB9;&#x5668;&#x8FD0;&#x884C; (&#x53D1;&#x9001; SIGTERM )</td>
<td style="text-align:left">docker stop [containerId]</td>
</tr>
<tr>
<td style="text-align:left">logs [containerId]</td>
<td style="text-align:left">&#x67E5;&#x770B; docker &#x5BB9;&#x5668;&#x7684;&#x8F93;&#x51FA;</td>
<td style="text-align:left">docker logs [containerId]</td>
</tr>
<tr>
<td style="text-align:left">exec [containerId]</td>
<td style="text-align:left">&#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684; docker &#x5BB9;&#x5668;</td>
<td style="text-align:left">docker container exec -it [containerID] /bin/bash</td>
</tr>
<tr>
<td style="text-align:left">cp [containerId]</td>
<td style="text-align:left">&#x4ECE;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684; Docker &#x5BB9;&#x5668;&#x91CC;&#x9762;&#xFF0C;&#x5C06;&#x6587;&#x4EF6;&#x62F7;&#x8D1D;&#x5230;&#x672C;&#x673A;</td>
<td style="text-align:left">docker container cp [containID]:app/package.json .</td>
</tr>
</tbody>
</table>
<h3 id="t149.2 &#x542F;&#x52A8;&#x5BB9;&#x5668;">9.2 &#x542F;&#x52A8;&#x5BB9;&#x5668; <a href="#t149.2 &#x542F;&#x52A8;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker run ubuntu /bin/echo <span class="hljs-string">&quot;Hello world&quot;</span>
</code></pre>
<ul>
<li>docker: Docker &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x3002;</li>
<li>run:&#x4E0E;&#x524D;&#x9762;&#x7684; docker &#x7EC4;&#x5408;&#x6765;&#x8FD0;&#x884C;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;&#x3002;</li>
<li>ubuntu&#x6307;&#x5B9A;&#x8981;&#x8FD0;&#x884C;&#x7684;&#x955C;&#x50CF;&#xFF0C;Docker&#x9996;&#x5148;&#x4ECE;&#x672C;&#x5730;&#x4E3B;&#x673A;&#x4E0A;&#x67E5;&#x627E;&#x955C;&#x50CF;&#x662F;&#x5426;&#x5B58;&#x5728;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;Docker &#x5C31;&#x4F1A;&#x4ECE;&#x955C;&#x50CF;&#x4ED3;&#x5E93; Docker Hub &#x4E0B;&#x8F7D;&#x516C;&#x5171;&#x955C;&#x50CF;&#x3002;</li>
<li>/bin/echo &quot;Hello world&quot;: &#x5728;&#x542F;&#x52A8;&#x7684;&#x5BB9;&#x5668;&#x91CC;&#x6267;&#x884C;&#x7684;&#x547D;&#x4EE4;</li>
</ul>
<blockquote>
<p>Docker&#x4EE5;ubuntu&#x955C;&#x50CF;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x5BB9;&#x5668;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x5BB9;&#x5668;&#x91CC;&#x6267;&#x884C; bin/echo &quot;Hello world&quot;&#xFF0C;&#x7136;&#x540E;&#x8F93;&#x51FA;&#x7ED3;&#x679C;</p>
</blockquote>
<h3 id="t159.3 &#x67E5;&#x770B;&#x5BB9;&#x5668;">9.3 &#x67E5;&#x770B;&#x5BB9;&#x5668; <a href="#t159.3 &#x67E5;&#x770B;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker ps
docker -a
docker -l
</code></pre>
<ul>
<li>-a &#x663E;&#x793A;&#x6240;&#x6709;&#x7684;&#x5BB9;&#x5668;&#xFF0C;&#x5305;&#x62EC;&#x5DF2;&#x505C;&#x6B62;&#x7684;</li>
<li>-l &#x663E;&#x793A;&#x6700;&#x65B0;&#x7684;&#x90A3;&#x4E2A;&#x5BB9;&#x5668;</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:left">&#x5B57;&#x6BB5;</th>
<th style="text-align:left">&#x542B;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">CONTAINER ID</td>
<td style="text-align:left">&#x5BB9;&#x5668;ID</td>
</tr>
<tr>
<td style="text-align:left">IMAGE</td>
<td style="text-align:left">&#x4F7F;&#x7528;&#x7684;&#x955C;&#x50CF;</td>
</tr>
<tr>
<td style="text-align:left">COMMAND</td>
<td style="text-align:left">&#x4F7F;&#x7528;&#x7684;&#x547D;&#x4EE4;</td>
</tr>
<tr>
<td style="text-align:left">CREATED</td>
<td style="text-align:left">&#x521B;&#x5EFA;&#x65F6;&#x95F4;</td>
</tr>
<tr>
<td style="text-align:left">STATUS</td>
<td style="text-align:left">&#x72B6;&#x6001;</td>
</tr>
<tr>
<td style="text-align:left">PORTS</td>
<td style="text-align:left">&#x7AEF;&#x53E3;&#x53F7;</td>
</tr>
<tr>
<td style="text-align:left">NAMES</td>
<td style="text-align:left">&#x81EA;&#x52A8;&#x5206;&#x914D;&#x7684;&#x540D;&#x79F0;</td>
</tr>
</tbody>
</table>
<h3 id="t169.4 &#x8FD0;&#x884C;&#x4EA4;&#x4E92;&#x5F0F;&#x7684;&#x5BB9;&#x5668;">9.4 &#x8FD0;&#x884C;&#x4EA4;&#x4E92;&#x5F0F;&#x7684;&#x5BB9;&#x5668; <a href="#t169.4 &#x8FD0;&#x884C;&#x4EA4;&#x4E92;&#x5F0F;&#x7684;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker run -i -t ubuntu /bin/bash
</code></pre>
<ul>
<li>-t=--interactive  &#x5728;&#x65B0;&#x5BB9;&#x5668;&#x5185;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x4F2A;&#x7EC8;&#x7AEF;&#x6216;&#x7EC8;&#x7AEF;&#x3002;</li>
<li>-i=--tty &#x5141;&#x8BB8;&#x4F60;&#x5BF9;&#x5BB9;&#x5668;&#x5185;&#x7684;&#x6807;&#x51C6;&#x8F93;&#x5165; (STDIN) &#x8FDB;&#x884C;&#x4EA4;&#x4E92;&#x3002;</li>
</ul>
<blockquote>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8FD0;&#x884C;exit&#x547D;&#x4EE4;&#x6216;&#x8005;&#x4F7F;&#x7528;CTRL+D&#x6765;&#x9000;&#x51FA;&#x5BB9;&#x5668;&#x3002;</p>
</blockquote>
<h3 id="t179.5 &#x540E;&#x53F0;&#x8FD0;&#x884C;&#x5BB9;&#x5668;">9.5 &#x540E;&#x53F0;&#x8FD0;&#x884C;&#x5BB9;&#x5668; <a href="#t179.5 &#x540E;&#x53F0;&#x8FD0;&#x884C;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker run --detach centos ping www.baidu.com
docker ps 
docker logs --follow ad04d9acde94
docker stop ad04d9acde94
</code></pre>
<h3 id="t189.6 kill">9.6 kill <a href="#t189.6 kill"> # </a></h3>
<pre><code class="lang-js">docker kill <span class="hljs-number">5</span>a5c3a760f61
</code></pre>
<blockquote>
<p>kill&#x662F;&#x4E0D;&#x7BA1;&#x5BB9;&#x5668;&#x540C;&#x4E0D;&#x540C;&#x610F;&#xFF0C;&#x76F4;&#x63A5;&#x6267;&#x884C;<code>kill -9</code>&#xFF0C;&#x5F3A;&#x884C;&#x7EC8;&#x6B62;&#xFF1B;stop&#x7684;&#x8BDD;&#xFF0C;&#x9996;&#x5148;&#x7ED9;&#x5BB9;&#x5668;&#x53D1;&#x9001;&#x4E00;&#x4E2A;<code>TERM</code>&#x4FE1;&#x53F7;&#xFF0C;&#x8BA9;&#x5BB9;&#x5668;&#x505A;&#x4E00;&#x4E9B;&#x9000;&#x51FA;&#x524D;&#x5FC5;&#x987B;&#x7684;&#x4FDD;&#x62A4;&#x6027;&#x3001;&#x5B89;&#x5168;&#x6027;&#x64CD;&#x4F5C;&#xFF0C;&#x7136;&#x540E;&#x8BA9;&#x5BB9;&#x5668;&#x81EA;&#x52A8;&#x505C;&#x6B62;&#x8FD0;&#x884C;&#xFF0C;&#x5982;&#x679C;&#x5728;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x5BB9;&#x5668;&#x8FD8;&#x662F;&#x6CA1;&#x6709;&#x505C;&#x6B62;&#xFF0C;&#x518D;&#x8FDB;&#x884C;kill -9&#xFF0C;&#x5F3A;&#x884C;&#x7EC8;&#x6B62;</p>
</blockquote>
<h3 id="t199.7 &#x5220;&#x9664;&#x5BB9;&#x5668;">9.7 &#x5220;&#x9664;&#x5BB9;&#x5668; <a href="#t199.7 &#x5220;&#x9664;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker rm <span class="hljs-number">5</span>a5c3a760f61
</code></pre>
<h3 id="t209.8 &#x542F;&#x52A8;&#x5BB9;&#x5668;">9.8 &#x542F;&#x52A8;&#x5BB9;&#x5668; <a href="#t209.8 &#x542F;&#x52A8;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker start [containerId]
</code></pre>
<h3 id="t219.9 &#x505C;&#x6B62;&#x5BB9;&#x5668;">9.9 &#x505C;&#x6B62;&#x5BB9;&#x5668; <a href="#t219.9 &#x505C;&#x6B62;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker stop [containerId]
</code></pre>
<h3 id="t229.10 &#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;">9.10 &#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x5BB9;&#x5668; <a href="#t229.10 &#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker attach [containerID]
</code></pre>
<h3 id="t239.11 &#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x4E2D;&#x7684;&#x5BB9;&#x5668;">9.11 &#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x4E2D;&#x7684;&#x5BB9;&#x5668; <a href="#t239.11 &#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x4E2D;&#x7684;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker container -exec -it [containerID] /bin/bash
</code></pre>
<h3 id="t249.12 &#x62F7;&#x8D1D;&#x6587;&#x4EF6;">9.12 &#x62F7;&#x8D1D;&#x6587;&#x4EF6; <a href="#t249.12 &#x62F7;&#x8D1D;&#x6587;&#x4EF6;"> # </a></h3>
<pre><code class="lang-js">docker container cp [containerID] /readme.md .
</code></pre>
<h3 id="t259.13 &#x81EA;&#x52A8;&#x5220;&#x9664;">9.13 &#x81EA;&#x52A8;&#x5220;&#x9664; <a href="#t259.13 &#x81EA;&#x52A8;&#x5220;&#x9664;"> # </a></h3>
<pre><code class="lang-js">docker run --rm ubuntu /bin/bash
</code></pre>
<h2 id="t2610. &#x5236;&#x4F5C;&#x4E2A;&#x6027;&#x5316;&#x955C;&#x50CF;">10. &#x5236;&#x4F5C;&#x4E2A;&#x6027;&#x5316;&#x955C;&#x50CF; <a href="#t2610. &#x5236;&#x4F5C;&#x4E2A;&#x6027;&#x5316;&#x955C;&#x50CF;"> # </a></h2>
<pre><code class="lang-js">docker commit -m<span class="hljs-string">&quot;hello&quot;</span> -a <span class="hljs-string">&quot;zhangrenyang&quot;</span> [containerId] zhangrenyang/hello:latest
docker images
docker run zhangrenyang/hello /bin/bash
docker rm b2839066c362
docker rmi c79ef5b3f5fc
</code></pre>
<h2 id="t2711. &#x5236;&#x4F5C;Dockerfile">11. &#x5236;&#x4F5C;Dockerfile <a href="#t2711. &#x5236;&#x4F5C;Dockerfile"> # </a></h2>
<ul>
<li>Docker &#x7684;&#x955C;&#x50CF;&#x662F;&#x7528;&#x4E00;&#x5C42;&#x4E00;&#x5C42;&#x7684;&#x6587;&#x4EF6;&#x7EC4;&#x6210;&#x7684;</li>
<li><code>docker inspect</code>&#x547D;&#x4EE4;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x955C;&#x50CF;&#x6216;&#x8005;&#x5BB9;&#x5668;</li>
<li>Layers&#x5C31;&#x662F;&#x955C;&#x50CF;&#x7684;&#x5C42;&#x6587;&#x4EF6;&#xFF0C;&#x53EA;&#x8BFB;&#x4E0D;&#x80FD;&#x4FEE;&#x6539;&#x3002;&#x57FA;&#x4E8E;&#x955C;&#x50CF;&#x521B;&#x5EFA;&#x7684;&#x5BB9;&#x5668;&#x4F1A;&#x5171;&#x4EAB;&#x8FD9;&#x4E9B;&#x6587;&#x4EF6;&#x5C42;</li>
</ul>
<pre><code class="lang-js">docker inspect centos
</code></pre>
<h3 id="t2811.1 &#x7F16;&#x5199;Dockerfile">11.1 &#x7F16;&#x5199;Dockerfile <a href="#t2811.1 &#x7F16;&#x5199;Dockerfile"> # </a></h3>
<table>
<thead>
<tr>
<th style="text-align:left">&#x547D;&#x4EE4;</th>
<th style="text-align:left">&#x542B;&#x4E49;</th>
<th style="text-align:left">&#x6848;&#x4F8B;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">FROM</td>
<td style="text-align:left">&#x7EE7;&#x627F;&#x7684;&#x955C;&#x50CF;</td>
<td style="text-align:left">FROM node</td>
</tr>
<tr>
<td style="text-align:left">COPY</td>
<td style="text-align:left">&#x62F7;&#x8D1D;</td>
<td style="text-align:left">COPY ./app /app</td>
</tr>
<tr>
<td style="text-align:left">WORKDIR</td>
<td style="text-align:left">&#x6307;&#x5B9A;&#x5DE5;&#x4F5C;&#x8DEF;&#x5F84;</td>
<td style="text-align:left">WORKDIR /app</td>
</tr>
<tr>
<td style="text-align:left">RUN</td>
<td style="text-align:left">&#x7F16;&#x8BD1;&#x6253;&#x5305;&#x9636;&#x6BB5;&#x8FD0;&#x884C;&#x547D;&#x4EE4;</td>
<td style="text-align:left">RUN npm install</td>
</tr>
<tr>
<td style="text-align:left">EXPOSE</td>
<td style="text-align:left">&#x66B4;&#x9732;&#x7AEF;&#x53E3;</td>
<td style="text-align:left">EXPOSE 3000</td>
</tr>
<tr>
<td style="text-align:left">CMD</td>
<td style="text-align:left">&#x5BB9;&#x5668;&#x8FD0;&#x884C;&#x9636;&#x6BB5;&#x8FD0;&#x884C;&#x547D;&#x4EE4;</td>
<td style="text-align:left">CMD npm run start</td>
</tr>
</tbody>
</table>
<h3 id="t2911.2 .dockerignore">11.2 .dockerignore <a href="#t2911.2 .dockerignore"> # </a></h3>
<p>&#x8868;&#x793A;&#x8981;&#x6392;&#x9664;&#xFF0C;&#x4E0D;&#x8981;&#x6253;&#x5305;&#x5230;image&#x4E2D;&#x7684;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;</p>
<pre><code class="lang-js">.git
node_modules
</code></pre>
<h3 id="t3011.3 Dockerfile">11.3 Dockerfile <a href="#t3011.3 Dockerfile"> # </a></h3>
<h4 id="t3111.3.1 &#x5B89;&#x88C5;node">11.3.1 &#x5B89;&#x88C5;node <a href="#t3111.3.1 &#x5B89;&#x88C5;node"> # </a></h4>
<ul>
<li><a href="https://github.com/creationix/nvm/blob/master/README.md">nvm</a><pre><code class="lang-js">wget -qO- https:<span class="hljs-comment">//raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash</span>
nvm install stable
node -v
npm i cnpm -g
npm i nrm -g
</code></pre>
</li>
</ul>
<h4 id="t3211.3.2 &#x5B89;&#x88C5;express&#x9879;&#x76EE;&#x751F;&#x6210;&#x5668;">11.3.2 &#x5B89;&#x88C5;express&#x9879;&#x76EE;&#x751F;&#x6210;&#x5668; <a href="#t3211.3.2 &#x5B89;&#x88C5;express&#x9879;&#x76EE;&#x751F;&#x6210;&#x5668;"> # </a></h4>
<pre><code class="lang-js">npm install express-generator -g
express app
</code></pre>
<h4 id="t3311.3.3  Dockerfile">11.3.3  Dockerfile <a href="#t3311.3.3  Dockerfile"> # </a></h4>
<pre><code class="lang-js">FROM node
COPY ./app /app
WORKDIR /app
RUN npm install
EXPOSE <span class="hljs-number">3000</span>
</code></pre>
<ul>
<li>FROM  &#x8868;&#x793A;&#x8BE5;&#x955C;&#x50CF;&#x7EE7;&#x627F;&#x7684;&#x955C;&#x50CF; :&#x8868;&#x793A;&#x6807;&#x7B7E;</li>
<li>COPY &#x662F;&#x5C06;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x4E0B;&#x7684;app&#x76EE;&#x5F55;&#x4E0B;&#x9762;&#x7684;&#x6587;&#x4EF6;&#x90FD;&#x62F7;&#x8D1D;&#x5230;image&#x91CC;&#x7684;/app&#x76EE;&#x5F55;&#x4E2D;</li>
<li>WORKDIR  &#x6307;&#x5B9A;&#x5DE5;&#x4F5C;&#x8DEF;&#x5F84;&#xFF0C;&#x7C7B;&#x4F3C;&#x4E8E;&#x6267;&#x884C; <code>cd</code> &#x547D;&#x4EE4;</li>
<li>RUN npm install &#x5728;/app&#x76EE;&#x5F55;&#x4E0B;&#x5B89;&#x88C5;&#x4F9D;&#x8D56;&#xFF0C;&#x5B89;&#x88C5;&#x540E;&#x7684;&#x4F9D;&#x8D56;&#x4E5F;&#x4F1A;&#x6253;&#x5305;&#x5230;image&#x76EE;&#x5F55;&#x4E2D;</li>
<li>EXPOSE &#x66B4;&#x9732;3000&#x7AEF;&#x53E3;&#xFF0C;&#x5141;&#x8BB8;&#x5916;&#x90E8;&#x8FDE;&#x63A5;&#x8FD9;&#x4E2A;&#x7AEF;&#x53E3;</li>
</ul>
<h3 id="t3411.4 &#x521B;&#x5EFA;image">11.4 &#x521B;&#x5EFA;image <a href="#t3411.4 &#x521B;&#x5EFA;image"> # </a></h3>
<pre><code class="lang-js">docker build -t express-demo .
</code></pre>
<ul>
<li>-t&#x7528;&#x6765;&#x6307;&#x5B9A;image&#x955C;&#x50CF;&#x7684;&#x540D;&#x79F0;&#xFF0C;&#x540E;&#x9762;&#x8FD8;&#x53EF;&#x4EE5;&#x52A0;&#x5192;&#x53F7;&#x6307;&#x5B9A;&#x6807;&#x7B7E;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x6307;&#x5B9A;&#x9ED8;&#x8BA4;&#x5C31;&#x662F;latest</li>
<li><code>.</code> &#x8868;&#x793A;Dockerfile&#x6587;&#x4EF6;&#x7684;&#x6240;&#x6709;&#x8DEF;&#x5F84;,<code>.</code>&#x5C31;&#x8868;&#x793A;&#x5F53;&#x524D;&#x8DEF;&#x5F84;</li>
</ul>
<h3 id="t3511.5 &#x4F7F;&#x7528;&#x65B0;&#x7684;&#x955C;&#x50CF;&#x8FD0;&#x884C;&#x5BB9;&#x5668;">11.5 &#x4F7F;&#x7528;&#x65B0;&#x7684;&#x955C;&#x50CF;&#x8FD0;&#x884C;&#x5BB9;&#x5668; <a href="#t3511.5 &#x4F7F;&#x7528;&#x65B0;&#x7684;&#x955C;&#x50CF;&#x8FD0;&#x884C;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker container run -p <span class="hljs-number">3333</span>:<span class="hljs-number">3000</span> -it express-demo /bin/bash
</code></pre>
<pre><code class="lang-js">npm start
</code></pre>
<ul>
<li><code>-p</code> &#x53C2;&#x6570;&#x662F;&#x5C06;&#x5BB9;&#x5668;&#x7684;3000&#x7AEF;&#x53E3;&#x6620;&#x5C04;&#x4E3A;&#x672C;&#x673A;&#x7684;3333&#x7AEF;&#x53E3;</li>
<li><code>-it</code> &#x53C2;&#x6570;&#x662F;&#x5C06;&#x5BB9;&#x5668;&#x7684;shell&#x5BB9;&#x5668;&#x6620;&#x5C04;&#x4E3A;&#x5F53;&#x524D;&#x7684;shell,&#x5728;&#x672C;&#x673A;&#x5BB9;&#x5668;&#x4E2D;&#x6267;&#x884C;&#x7684;&#x547D;&#x4EE4;&#x90FD;&#x4F1A;&#x53D1;&#x9001;&#x5230;&#x5BB9;&#x5668;&#x5F53;&#x4E2D;&#x6267;&#x884C;</li>
<li><code>express-demo</code> image&#x7684;&#x540D;&#x79F0;</li>
<li>/bin/bash &#x5BB9;&#x5668;&#x542F;&#x52A8;&#x540E;&#x6267;&#x884C;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x547D;&#x4EE4;,&#x8FD9;&#x91CC;&#x662F;&#x542F;&#x52A8;&#x4E86;bash&#x5BB9;&#x5668;&#x4EE5;&#x4FBF;&#x6267;&#x884C;&#x811A;&#x672C;</li>
<li><code>--rm</code> &#x5728;&#x5BB9;&#x5668;&#x7EC8;&#x6B62;&#x8FD0;&#x884C;&#x540E;&#x81EA;&#x52A8;&#x5220;&#x9664;&#x5BB9;&#x5668;&#x6587;&#x4EF6;</li>
</ul>
<h3 id="t3611.6 CMD">11.6 CMD <a href="#t3611.6 CMD"> # </a></h3>
<pre><code class="lang-js">CMD npm start
</code></pre>
<ul>
<li>RUN&#x547D;&#x4EE4;&#x5728; image &#x6587;&#x4EF6;&#x7684;&#x6784;&#x5EFA;&#x9636;&#x6BB5;&#x6267;&#x884C;&#xFF0C;&#x6267;&#x884C;&#x7ED3;&#x679C;&#x90FD;&#x4F1A;&#x6253;&#x5305;&#x8FDB;&#x5165; image &#x6587;&#x4EF6;&#xFF1B;CMD&#x547D;&#x4EE4;&#x5219;&#x662F;&#x5728;&#x5BB9;&#x5668;&#x542F;&#x52A8;&#x540E;&#x6267;&#x884C;</li>
<li>&#x4E00;&#x4E2A; Dockerfile &#x53EF;&#x4EE5;&#x5305;&#x542B;&#x591A;&#x4E2A;RUN&#x547D;&#x4EE4;&#xFF0C;&#x4F46;&#x662F;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;CMD&#x547D;&#x4EE4;</li>
<li>&#x6307;&#x5B9A;&#x4E86;CMD&#x547D;&#x4EE4;&#x4EE5;&#x540E;&#xFF0C;docker container run&#x547D;&#x4EE4;&#x5C31;&#x4E0D;&#x80FD;&#x9644;&#x52A0;&#x547D;&#x4EE4;&#x4E86;&#xFF08;&#x6BD4;&#x5982;&#x524D;&#x9762;&#x7684;/bin/bash&#xFF09;&#xFF0C;&#x5426;&#x5219;&#x5B83;&#x4F1A;&#x8986;&#x76D6;CMD&#x547D;&#x4EE4;</li>
</ul>
<h3 id="t3711.7 &#x53D1;&#x5E03;image">11.7 &#x53D1;&#x5E03;image <a href="#t3711.7 &#x53D1;&#x5E03;image"> # </a></h3>
<ul>
<li><a href="https://hub.docker.com/">&#x6CE8;&#x518C;&#x8D26;&#x6237;</a></li>
<li>docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]</li>
</ul>
<pre><code class="lang-js">docker login
docker image tag [imageName] [username]/[repository]:[tag]
docker image build -t [username]/[repository]:[tag] .

docker tag express-demo zhangrenyang/express-demo:<span class="hljs-number">1.0</span><span class="hljs-number">.0</span>
docker push zhangrenyang/express-demo:<span class="hljs-number">1.0</span><span class="hljs-number">.0</span>
</code></pre>
<h2 id="t3812 &#x6570;&#x636E;&#x76D8;">12 &#x6570;&#x636E;&#x76D8; <a href="#t3812 &#x6570;&#x636E;&#x76D8;"> # </a></h2>
<ul>
<li>&#x5220;&#x9664;&#x5BB9;&#x5668;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5BB9;&#x5668;&#x5C42;&#x91CC;&#x521B;&#x5EFA;&#x7684;&#x6587;&#x4EF6;&#x4E5F;&#x4F1A;&#x88AB;&#x5220;&#x9664;&#x6389;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x4E9B;&#x6570;&#x636E;&#x4F60;&#x60F3;&#x6C38;&#x4E45;&#x4FDD;&#x5B58;&#xFF0C;&#x6BD4;&#x5982;Web&#x670D;&#x52A1;&#x5668;&#x7684;&#x65E5;&#x5FD7;&#xFF0C;&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x53EF;&#x4EE5;&#x4E3A;&#x5BB9;&#x5668;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x76D8;&#x3002;</li>
<li>&#x521B;&#x5EFA;&#x5BB9;&#x5668;&#x7684;&#x65F6;&#x5019;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;<code>-v</code>&#x6216;<code>--volumn</code>&#x7ED9;&#x5B83;&#x6307;&#x5B9A;&#x4E00;&#x4E0B;&#x6570;&#x636E;&#x76D8;<h3 id="t3912.1 &#x9ED8;&#x8BA4;&#x6570;&#x636E;&#x76D8;">12.1 &#x9ED8;&#x8BA4;&#x6570;&#x636E;&#x76D8; <a href="#t3912.1 &#x9ED8;&#x8BA4;&#x6570;&#x636E;&#x76D8;"> # </a></h3>
<pre><code class="lang-js">docker run -v /mnt -i -t --name logs centos bash
cd /mnt
echo <span class="hljs-number">1</span> &gt; <span class="hljs-number">1.</span>txt
exit
</code></pre>
</li>
</ul>
<pre><code class="lang-js">docker inspect logs
<span class="hljs-string">&quot;Mounts&quot;</span>: [
    {
        <span class="hljs-string">&quot;Source&quot;</span>:<span class="hljs-string">&quot;/mnt/sda1/var/lib/docker/volumes/dea6a8b3aefafa907d883895bbf931a502a51959f83d63b7ece8d7814cf5d489/_data&quot;</span>,
        <span class="hljs-string">&quot;Destination&quot;</span>: <span class="hljs-string">&quot;/mnt&quot;</span>,
    }
]
</code></pre>
<ul>
<li><code>Source</code>&#x7684;&#x503C;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x7ED9;&#x5BB9;&#x5668;&#x6307;&#x5B9A;&#x7684;&#x6570;&#x636E;&#x76D8;&#x5728;&#x4E3B;&#x673A;&#x4E0A;&#x7684;&#x4F4D;&#x7F6E; </li>
<li><code>Destination</code>&#x7684;&#x503C;&#x662F;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x76D8;&#x5728;&#x5BB9;&#x5668;&#x4E0A;&#x7684;&#x4F4D;&#x7F6E; </li>
</ul>
<h3 id="t4012.2 &#x6307;&#x5B9A;&#x6570;&#x636E;&#x76D8;">12.2 &#x6307;&#x5B9A;&#x6570;&#x636E;&#x76D8; <a href="#t4012.2 &#x6307;&#x5B9A;&#x6570;&#x636E;&#x76D8;"> # </a></h3>
<pre><code class="lang-js">mkdir ~/data
docker run -v ~/data:/mnt -ti --name logs2 centos bash
cd /mnt
echo 3 &gt; 3.txt
exit
cat ~/data/3.txt
</code></pre>
<ul>
<li>~/data:/mnt   &#x628A;&#x5F53;&#x524D;&#x7528;&#x6237;&#x76EE;&#x5F55;&#x4E2D;&#x7684;<code>data</code>&#x76EE;&#x5F55;&#x6620;&#x5C04;&#x5230;<code>/mnt</code>&#x4E0A;</li>
</ul>
<h3 id="t4112.3 &#x6307;&#x5B9A;&#x6570;&#x636E;&#x76D8;&#x5BB9;&#x5668;">12.3 &#x6307;&#x5B9A;&#x6570;&#x636E;&#x76D8;&#x5BB9;&#x5668; <a href="#t4112.3 &#x6307;&#x5B9A;&#x6570;&#x636E;&#x76D8;&#x5BB9;&#x5668;"> # </a></h3>
<pre><code class="lang-js">docker create -v /mnt --name logger centos
docker run --volumes-<span class="hljs-keyword">from</span> logger --name logger3 -i -t centos bash
cd /mnt 
touch logger3
docker run --volumes-<span class="hljs-keyword">from</span> logger --name logger4 -i -t centos bash
cd /mnt
touch logger4
</code></pre>
<h3 id="t4212.4  &#x7BA1;&#x7406;&#x6570;&#x636E;&#x76D8;">12.4  &#x7BA1;&#x7406;&#x6570;&#x636E;&#x76D8; <a href="#t4212.4  &#x7BA1;&#x7406;&#x6570;&#x636E;&#x76D8;"> # </a></h3>
<pre><code class="lang-js">docker volume ls &#x5217;&#x51FA;&#x6240;&#x6709;&#x7684;&#x6570;&#x636E;&#x76D8;
docker volume ls -f dangling=<span class="hljs-literal">true</span> &#x5217;&#x51FA;&#x5DF2;&#x7ECF;&#x5B64;&#x7ACB;&#x7684;&#x6570;&#x636E;&#x76D8;
docker volume rm xxxx
docker volume ls
docker rm logger1 logger2
docker volume inspect xxx
docker rm logger -v
</code></pre>
<h2 id="t4312. &#x7F51;&#x7EDC;">12. &#x7F51;&#x7EDC; <a href="#t4312. &#x7F51;&#x7EDC;"> # </a></h2>
<p>docker&#x91CC;&#x9762;&#x6709;&#x4E00;&#x4E2A;DNS&#x670D;&#x52A1;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5BB9;&#x5668;&#x540D;&#x79F0;&#x8BBF;&#x95EE;&#x4E3B;&#x673A;
&#x7F51;&#x7EDC;&#x7C7B;&#x578B;</p>
<ul>
<li>none &#x65E0;&#x7F51;&#x7EDC;&#xFF0C;&#x5BF9;&#x5916;&#x754C;&#x5B8C;&#x5168;&#x9694;&#x79BB;</li>
<li>host &#x4E3B;&#x673A;&#x7F51;&#x7EDC;</li>
<li>bridge &#x6865;&#x63A5;&#x7F51;&#x7EDC;&#xFF0C;&#x9ED8;&#x8BA4;&#x7F51;&#x7EDC;</li>
</ul>
<h3 id="t4412.1 bridge">12.1 bridge <a href="#t4412.1 bridge"> # </a></h3>
<pre><code class="lang-js">docker network ls
docker inspect bridge
docker run -d --name server1 nginx
docker run -d --name server2 nginx
docker exec -it server1 bash
ping server2
</code></pre>
<h3 id="t4512.2 none">12.2 none <a href="#t4512.2 none"> # </a></h3>
<pre><code class="lang-js">docker run -d --name server_none --net none nginx
docker inspect none
docker exec -it server_none bash
ip addr
</code></pre>
<h3 id="t4612.3 host">12.3 host <a href="#t4612.3 host"> # </a></h3>
<pre><code class="lang-js">docker run -d --name server_host --net host nginx
docker inspect none
docker exec -it server_host bash
ip addr
</code></pre>
<h3 id="t4712.4 &#x8BBF;&#x95EE;&#x6865;&#x63A5;&#x7F51;&#x7EDC;&#x91CC;&#x9762;&#x7684;&#x670D;&#x52A1;">12.4 &#x8BBF;&#x95EE;&#x6865;&#x63A5;&#x7F51;&#x7EDC;&#x91CC;&#x9762;&#x7684;&#x670D;&#x52A1; <a href="#t4712.4 &#x8BBF;&#x95EE;&#x6865;&#x63A5;&#x7F51;&#x7EDC;&#x91CC;&#x9762;&#x7684;&#x670D;&#x52A1;"> # </a></h3>
<pre><code class="lang-js">docker inspect nginx
<span class="hljs-number">443</span> <span class="hljs-number">80</span>
docker run -d --name server_nginx -p <span class="hljs-string">&quot;8080:80&quot;</span>  nginx
</code></pre>
<ul>
<li>&#x8BBF;&#x95EE;&#x4E3B;&#x673A;&#x7684;8080&#x7AEF;&#x53E3;&#x4F1A;&#x88AB;&#x5B9A;&#x5411;&#x5230;&#x5BB9;&#x5668;&#x7684;80&#x7AEF;&#x53E3;</li>
</ul>
<h3 id="t4812.5 &#x67E5;&#x770B;&#x4E3B;&#x673A;&#x7ED1;&#x5B9A;&#x7684;&#x7AEF;&#x53E3;">12.5 &#x67E5;&#x770B;&#x4E3B;&#x673A;&#x7ED1;&#x5B9A;&#x7684;&#x7AEF;&#x53E3; <a href="#t4812.5 &#x67E5;&#x770B;&#x4E3B;&#x673A;&#x7ED1;&#x5B9A;&#x7684;&#x7AEF;&#x53E3;"> # </a></h3>
<pre><code class="lang-js">docker inspect [&#x5BB9;&#x5668;&#x540D;&#x79F0;]
docker port server_nginx
</code></pre>
<h3 id="t4912.6 &#x6307;&#x5411;&#x4E3B;&#x673A;&#x7684;&#x968F;&#x673A;&#x7AEF;&#x53E3;">12.6 &#x6307;&#x5411;&#x4E3B;&#x673A;&#x7684;&#x968F;&#x673A;&#x7AEF;&#x53E3; <a href="#t4912.6 &#x6307;&#x5411;&#x4E3B;&#x673A;&#x7684;&#x968F;&#x673A;&#x7AEF;&#x53E3;"> # </a></h3>
<pre><code class="lang-js">docker run -d --name webserver --publish <span class="hljs-number">80</span> nginx
docker port webserver

docker run -d --name webserver --publish-all nginx
docker run -d --name webserver --P nginx
<span class="hljs-string">`
</span></code></pre>
<h3 id="t5012.7 &#x521B;&#x5EFA;&#x81EA;&#x5B9A;&#x4E49;&#x7F51;&#x7EDC;">12.7 &#x521B;&#x5EFA;&#x81EA;&#x5B9A;&#x4E49;&#x7F51;&#x7EDC; <a href="#t5012.7 &#x521B;&#x5EFA;&#x81EA;&#x5B9A;&#x4E49;&#x7F51;&#x7EDC;"> # </a></h3>
<pre><code class="lang-js">docker network create --driver bridge web
docker network inspect web
</code></pre>
<h3 id="t5112.8 &#x5236;&#x5B9A;&#x7F51;&#x7EDC;">12.8 &#x5236;&#x5B9A;&#x7F51;&#x7EDC; <a href="#t5112.8 &#x5236;&#x5B9A;&#x7F51;&#x7EDC;"> # </a></h3>
<pre><code class="lang-js">docker run -d --name webserver  --net web nginx
docker network connect  web webserver1
docker network disconnect web webserver2
</code></pre>
<h2 id="t5213.compose">13.compose <a href="#t5213.compose"> # </a></h2>
<ul>
<li>Compose &#x901A;&#x8FC7;&#x4E00;&#x4E2A;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x6765;&#x7BA1;&#x7406;&#x591A;&#x4E2A;Docker&#x5BB9;&#x5668;&#xFF0C;&#x5728;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x5BB9;&#x5668;&#x901A;&#x8FC7;services&#x6765;&#x5B9A;&#x4E49;&#xFF0C;&#x7136;&#x540E;&#x4F7F;&#x7528;docker-compose&#x811A;&#x672C;&#x6765;&#x542F;&#x52A8;&#xFF0C;&#x505C;&#x6B62;&#x548C;&#x91CD;&#x542F;&#x5E94;&#x7528;&#xFF0C;&#x548C;&#x5E94;&#x7528;&#x4E2D;&#x7684;&#x670D;&#x52A1;&#x4EE5;&#x53CA;&#x6240;&#x6709;&#x4F9D;&#x8D56;&#x670D;&#x52A1;&#x7684;&#x5BB9;&#x5668;&#xFF0C;&#x975E;&#x5E38;&#x9002;&#x5408;&#x7EC4;&#x5408;&#x4F7F;&#x7528;&#x591A;&#x4E2A;&#x5BB9;&#x5668;&#x8FDB;&#x884C;&#x5F00;&#x53D1;&#x7684;&#x573A;&#x666F;
&#x6B65;&#x9AA4;&#xFF1A;</li>
<li>&#x5728; <code>docker-compose.yml</code> &#x4E2D;&#x5B9A;&#x4E49;&#x7EC4;&#x6210;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x670D;&#x52A1;&#xFF0C;&#x4EE5;&#x4FBF;&#x5B83;&#x4EEC;&#x53EF;&#x4EE5;&#x5728;&#x9694;&#x79BB;&#x7684;&#x73AF;&#x5883;&#x4E2D;&#x4E00;&#x8D77;&#x8FD0;&#x884C;&#x3002;</li>
<li>&#x6700;&#x540E;&#xFF0C;&#x8FD0;&#x884C;<code>docker-compose up</code>&#xFF0C;Compose &#x5C06;&#x542F;&#x52A8;&#x5E76;&#x8FD0;&#x884C;&#x6574;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x3002;
&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x7EC4;&#x6210;</li>
<li>services &#x53EF;&#x4EE5;&#x5B9A;&#x4E49;&#x9700;&#x8981;&#x7684;&#x670D;&#x52A1;&#xFF0C;&#x6BCF;&#x4E2A;&#x670D;&#x52A1;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x540D;&#x5B57;&#x3001;&#x4F7F;&#x7528;&#x7684;&#x955C;&#x50CF;&#x3001;&#x6302;&#x8F7D;&#x7684;&#x6570;&#x636E;&#x5377;&#x6240;&#x5C5E;&#x7684;&#x7F51;&#x7EDC;&#x548C;&#x4F9D;&#x8D56;&#x7684;&#x5176;&#x5B83;&#x670D;&#x52A1;&#x3002;</li>
<li>networks &#x662F;&#x5E94;&#x7528;&#x7684;&#x7F51;&#x7EDC;&#xFF0C;&#x5728;&#x5B83;&#x4E0B;&#x9762;&#x53EF;&#x4EE5;&#x5B9A;&#x4E49;&#x4F7F;&#x7528;&#x7684;&#x7F51;&#x7EDC;&#x540D;&#x79F0;&#xFF0C;&#x7C7B;&#x6027;&#x3002;</li>
<li>volumes&#x662F;&#x6570;&#x636E;&#x5377;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x6B64;&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x5377;&#xFF0C;&#x7136;&#x540E;&#x6302;&#x8F7D;&#x5230;&#x4E0D;&#x540C;&#x7684;&#x670D;&#x52A1;&#x4E0A;&#x9762;&#x4F7F;&#x7528;&#x3002;<pre><code class="lang-js">pip install docker-compose
</code></pre>
</li>
</ul>
<h3 id="t5313.1 docker-compose.yml">13.1 docker-compose.yml <a href="#t5313.1 docker-compose.yml"> # </a></h3>
<ul>
<li>&#x7A7A;&#x683C;&#x7F29;&#x8FDB;&#x8868;&#x793A;&#x5C42;&#x6B21;</li>
<li>&#x5192;&#x53F7;&#x7A7A;&#x683C;&#x540E;&#x9762;&#x6709;&#x7A7A;&#x683C;</li>
</ul>
<pre><code class="lang-yml"><span class="hljs-attr">version:</span> <span class="hljs-string">&apos;2&apos;</span>
<span class="hljs-attr">services:</span>
<span class="hljs-attr">  zfpx1:</span>
<span class="hljs-attr">    image:</span> <span class="hljs-string">nginx</span>
<span class="hljs-attr">    port:</span>
<span class="hljs-bullet">      -</span> <span class="hljs-string">&quot;8080:80&quot;</span>
<span class="hljs-attr">  zfpx2:</span>
<span class="hljs-attr">    image:</span> <span class="hljs-string">nginx</span>
<span class="hljs-attr">    port:</span>
<span class="hljs-bullet">      -</span> <span class="hljs-string">&quot;8081:80&quot;</span>
</code></pre>
<h3 id="t5413.2  nginx&#x5DE5;&#x5177;&#x5305;">13.2  nginx&#x5DE5;&#x5177;&#x5305; <a href="#t5413.2  nginx&#x5DE5;&#x5177;&#x5305;"> # </a></h3>
<pre><code class="lang-js">apt update
#ping
apt install inetutils-ping 
#nslookup
apt install dnsutils   
#ifconfig 
apt install net-tools    
#ip
apt install iproute2     
#curl
apt install curl
</code></pre>
<h3 id="t5513.3 &#x542F;&#x52A8;">13.3 &#x542F;&#x52A8; <a href="#t5513.3 &#x542F;&#x52A8;"> # </a></h3>
<pre><code class="lang-js">docker-compose up &#x542F;&#x52A8;&#x6240;&#x6709;&#x7684;&#x670D;&#x52A1;
docker-compose -d &#x540E;&#x53F0;&#x542F;&#x52A8;&#x6240;&#x6709;&#x7684;&#x670D;&#x52A1;
docker-compose ps &#x6253;&#x5370;&#x6240;&#x6709;&#x7684;&#x5BB9;&#x5668;
docker-compose stop &#x505C;&#x6B62;&#x6240;&#x6709;&#x670D;&#x52A1;
docker-compose logs -f &#x6301;&#x7EED;&#x8DDF;&#x8E2A;&#x65E5;&#x5FD7;
docker-compose exec zfpx1 bash &#x8FDB;&#x5165;zfpx&#x670D;&#x52A1;&#x7CFB;&#x7EDF;
docker-compose rm &#x5220;&#x9664;&#x670D;&#x52A1;&#x5BB9;&#x5668;
docker network ls &#x7F51;&#x7EDC;&#x4E0D;&#x4F1A;&#x5220;&#x9664;
docker-compose down &#x5220;&#x9664;&#x7F51;&#x8DEF;
</code></pre>
<ul>
<li>docker&#x4F1A;&#x521B;&#x5EFA;&#x9ED8;&#x8BA4;&#x7684;&#x7F51;&#x7EDC;</li>
</ul>
<h3 id="t5613.4 &#x914D;&#x7F6E;&#x7F51;&#x7EDC;">13.4 &#x914D;&#x7F6E;&#x7F51;&#x7EDC; <a href="#t5613.4 &#x914D;&#x7F6E;&#x7F51;&#x7EDC;"> # </a></h3>
<pre><code class="lang-js">docker-compose up -d
docker-compose exec zfpx1 bash
ping zfpx2 &#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x670D;&#x52A1;&#x7684;&#x540D;&#x5B57;&#x8FDE;&#x63A5;&#x5230;&#x5BF9;&#x65B9;
</code></pre>
<h3 id="t5713.5 &#x914D;&#x7F6E;&#x6570;&#x636E;&#x5377;">13.5 &#x914D;&#x7F6E;&#x6570;&#x636E;&#x5377; <a href="#t5713.5 &#x914D;&#x7F6E;&#x6570;&#x636E;&#x5377;"> # </a></h3>
<pre><code class="lang-js">version: <span class="hljs-string">&apos;2&apos;</span>
services:
  zfpx1:
    image: nginx
    ports:
      - <span class="hljs-string">&quot;8080:80&quot;</span>
    networks:
      - <span class="hljs-string">&quot;zfpx&quot;</span>
    volumes:
      - <span class="hljs-string">&quot;access:/mnt&quot;</span>
  zfpx2:
    image: nginx
    ports:
      - <span class="hljs-string">&quot;8081:80&quot;</span>
    networks:
      - <span class="hljs-string">&quot;zfpx&quot;</span>
    volumes:
      - <span class="hljs-string">&quot;access:/mnt&quot;</span>
  zfpx3:
    image: nginx
    ports:
      - <span class="hljs-string">&quot;8082:80&quot;</span>
    networks:
      - <span class="hljs-string">&quot;default&quot;</span>
      - <span class="hljs-string">&quot;zfpx&quot;</span>
networks:
  zfpx:
    driver: bridge
volumes:
  access:
    driver: local
</code></pre>
<h3 id="t5813.6 &#x914D;&#x7F6E;&#x6839;&#x76EE;&#x5F55;">13.6 &#x914D;&#x7F6E;&#x6839;&#x76EE;&#x5F55; <a href="#t5813.6 &#x914D;&#x7F6E;&#x6839;&#x76EE;&#x5F55;"> # </a></h3>
<pre><code class="lang-js">version: <span class="hljs-string">&apos;2&apos;</span>
services:
  zfpx1:
    image: nginx
    ports:
      - <span class="hljs-string">&quot;8080:80&quot;</span>
    networks:
      - <span class="hljs-string">&quot;zfpx&quot;</span>
    volumes:
      - <span class="hljs-string">&quot;access:/mnt&quot;</span>
      - <span class="hljs-string">&quot;./zfpx1:/usr/share/nginx/html&quot;</span>
  zfpx2:
    image: nginx
    ports:
      - <span class="hljs-string">&quot;8081:80&quot;</span>
    networks:
      - <span class="hljs-string">&quot;zfpx&quot;</span>
    volumes:
      - <span class="hljs-string">&quot;access:/mnt&quot;</span>
      - <span class="hljs-string">&quot;./zfpx2:/usr/share/nginx/html&quot;</span>
  zfpx3:
    image: nginx
    ports:
      - <span class="hljs-string">&quot;8082:80&quot;</span>
    networks:
      - <span class="hljs-string">&quot;default&quot;</span>
      - <span class="hljs-string">&quot;zfpx&quot;</span>
networks:
  zfpx:
    driver: bridge
volumes:
  access:
    driver: local
</code></pre>
<h2 id="t5914. nodeapp">14. nodeapp <a href="#t5914. nodeapp"> # </a></h2>
<p>nodeapp &#x662F;&#x4E00;&#x4E2A;&#x7528; Docker &#x642D;&#x5EFA;&#x7684;&#x672C;&#x5730; Node.js &#x5E94;&#x7528;&#x5F00;&#x53D1;&#x4E0E;&#x8FD0;&#x884C;&#x73AF;&#x5883;&#x3002;</p>
<h3 id="t6014.1 &#x670D;&#x52A1;">14.1 &#x670D;&#x52A1; <a href="#t6014.1 &#x670D;&#x52A1;"> # </a></h3>
<ul>
<li>db&#xFF1A;&#x4F7F;&#x7528; <code>mariadb</code> &#x4F5C;&#x4E3A;&#x5E94;&#x7528;&#x7684;&#x6570;&#x636E;&#x5E93;</li>
<li>node&#xFF1A;&#x542F;&#x52A8;<code>node</code>&#x670D;&#x52A1;</li>
<li>web&#xFF1A;&#x4F7F;&#x7528; <code>nginx</code> &#x4F5C;&#x4E3A;&#x5E94;&#x7528;&#x7684; web &#x670D;&#x52A1;&#x5668;</li>
</ul>
<h3 id="t6114.2 &#x7ED3;&#x6784;">14.2 &#x7ED3;&#x6784; <a href="#t6114.2 &#x7ED3;&#x6784;"> # </a></h3>
<ul>
<li>app&#xFF1A;&#x8FD9;&#x4E2A;&#x76EE;&#x5F55;&#x5B58;&#x50A8;&#x5E94;&#x7528;<ul>
<li>web &#x653E;&#x5E94;&#x7528;&#x7684;&#x4EE3;&#x7801;</li>
</ul>
</li>
<li>services&#xFF1A; &#x73AF;&#x5883;&#x91CC;&#x5B9A;&#x4E49;&#x7684;&#x670D;&#x52A1;&#x9700;&#x8981;&#x7684;&#x4E00;&#x4E9B;&#x670D;&#x52A1;</li>
<li>images: &#x65B9;&#x5F0F;&#x4E00;&#x4E9B;&#x8D2C;&#x4E49;&#x7684;&#x811A;&#x672C;&#x548C;&#x955C;&#x50CF;</li>
<li>docker-compose.yml&#xFF1A;&#x5B9A;&#x4E49;&#x672C;&#x5730;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#x9700;&#x8981;&#x7684;&#x670D;&#x52A1;</li>
<li>images/nginx/config/default.conf  &#x653E;&#x7F6E;nginx &#x914D;&#x7F6E;&#x6587;&#x4EF6;</li>
<li>node &#x7684;Dockfile&#x914D;&#x7F6E;&#x6587;&#x4EF6;</li>
</ul>
<h3 id="t6214.3 docker-compose.yml">14.3 docker-compose.yml <a href="#t6214.3 docker-compose.yml"> # </a></h3>
<pre><code class="lang-yaml"><span class="hljs-attr">version:</span> <span class="hljs-string">&apos;2&apos;</span>
<span class="hljs-attr">services:</span>
<span class="hljs-attr"> node:</span>
<span class="hljs-attr">  build:</span>
<span class="hljs-attr">    context:</span> <span class="hljs-string">./images/node</span>
<span class="hljs-attr">    dockerfile:</span> <span class="hljs-string">Dockerfile</span>
<span class="hljs-attr">  volumes:</span>
<span class="hljs-bullet">    -</span> <span class="hljs-string">./app/web:/web</span>
<span class="hljs-attr">  depends_on:</span>
<span class="hljs-bullet">   -</span> <span class="hljs-string">db</span>
<span class="hljs-attr"> web:</span>
<span class="hljs-attr">  image:</span> <span class="hljs-string">nginx</span>
<span class="hljs-attr">  ports:</span>
<span class="hljs-bullet">   -</span> <span class="hljs-string">&quot;8080:80&quot;</span>
<span class="hljs-attr">  volumes:</span>
<span class="hljs-bullet">   -</span> <span class="hljs-string">./images/nginx/config:/etc/nginx/conf.d</span>
<span class="hljs-bullet">   -</span> <span class="hljs-string">./app/web/views:/mnt/views</span>  
<span class="hljs-attr">  depends_on:</span>
<span class="hljs-bullet">   -</span> <span class="hljs-string">node</span>
<span class="hljs-attr"> db:</span>
<span class="hljs-attr">  image:</span> <span class="hljs-string">mariadb</span>
<span class="hljs-attr">  environment:</span>
<span class="hljs-attr">   MYSQL_ROOT_PASSWORD:</span> <span class="hljs-string">&quot;root&quot;</span>
<span class="hljs-attr">   MYSQL_DATABASE:</span> <span class="hljs-string">&quot;node&quot;</span>
<span class="hljs-attr">   MYSQL_USER:</span> <span class="hljs-string">&quot;zfpx&quot;</span>
<span class="hljs-attr">   MYSQL_PASSWORD:</span> <span class="hljs-string">&quot;123456&quot;</span>
<span class="hljs-attr">  volumes:</span>
<span class="hljs-attr">    - db:</span><span class="hljs-string">/var/lib/mysql</span>
<span class="hljs-attr">volumes:</span>
<span class="hljs-attr"> db:</span>
<span class="hljs-attr">  driver:</span> <span class="hljs-string">local</span>
</code></pre>
<h3 id="t6314.4 &#x5176;&#x5B83;&#x6587;&#x4EF6;">14.4 &#x5176;&#x5B83;&#x6587;&#x4EF6; <a href="#t6314.4 &#x5176;&#x5B83;&#x6587;&#x4EF6;"> # </a></h3>
<h4 id="t6414.4.1 app/web/server.js">14.4.1 app/web/server.js <a href="#t6414.4.1 app/web/server.js"> # </a></h4>
<pre><code class="lang-js"><span class="hljs-keyword">let</span> http=<span class="hljs-built_in">require</span>(<span class="hljs-string">&apos;http&apos;</span>);
<span class="hljs-keyword">var</span> mysql  = <span class="hljs-built_in">require</span>(<span class="hljs-string">&apos;mysql&apos;</span>);
<span class="hljs-keyword">var</span> connection = mysql.createConnection({
  <span class="hljs-attr">host</span>     : <span class="hljs-string">&apos;db&apos;</span>,
  <span class="hljs-attr">user</span>     : <span class="hljs-string">&apos;zfpx&apos;</span>,
  <span class="hljs-attr">password</span> : <span class="hljs-string">&apos;123456&apos;</span>,
  <span class="hljs-attr">database</span> : <span class="hljs-string">&apos;node&apos;</span>
});

connection.connect();

<span class="hljs-keyword">let</span> server=http.createServer(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">req,res</span>) </span>{
    connection.query(<span class="hljs-string">&apos;SELECT 2 + 2 AS solution&apos;</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">error, results, fields</span>) </span>{
        <span class="hljs-keyword">if</span> (error) <span class="hljs-keyword">throw</span> error;
        res.end(<span class="hljs-string">&apos;&apos;</span>+results[<span class="hljs-number">0</span>].solution);
    });
});
server.listen(<span class="hljs-number">3000</span>);
</code></pre>
<h4 id="t6514.4.2 package.json">14.4.2 package.json <a href="#t6514.4.2 package.json"> # </a></h4>
<pre><code class="lang-json">&quot;scripts&quot;: {
    &quot;start&quot;: &quot;node server.js&quot;
  },
&quot;dependencies&quot;: {
    &quot;mysql&quot;: &quot;^2.16.0&quot;
}
</code></pre>
<h4 id="t6614.4.3 images/node/Dockerfile">14.4.3 images/node/Dockerfile <a href="#t6614.4.3 images/node/Dockerfile"> # </a></h4>
<pre><code class="lang-js">FROM node
MAINTAINER zhangrenyang &lt;<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c56444d424b735e4942554d424b6c">[email&#160;protected]</a><span class="hljs-number">126.</span>com&gt;
WORKDIR /web
RUN npm install
CMD npm start
</code></pre>
<h4 id="t6714.4.4 images/nginx/config/default.conf">14.4.4 images/nginx/config/default.conf <a href="#t6714.4.4 images/nginx/config/default.conf"> # </a></h4>
<pre><code class="lang-js">upstream backend {
    server node:<span class="hljs-number">3000</span>;
}
server {
    listen <span class="hljs-number">80</span>;
    server_name localhost;
    root /mnt/views;
    index index.html index.htm;

    location /api {
        proxy_pass http:<span class="hljs-comment">//backend;</span>
    }
}
</code></pre>
<h2 id="t6815. &#x53C2;&#x8003;">15. &#x53C2;&#x8003; <a href="#t6815. &#x53C2;&#x8003;"> # </a></h2>
<ul>
<li><a href="http://www.ruanyifeng.com/blog/2016/07/yaml.html">yaml</a></li>
<li><a href="https://www.npmjs.com/package/mysql">mysql</a></li>
</ul>

        <div class="copyright">Powered by <a href="https://github.com/jaywcjlove/idoc" target="_blank">idoc</a>. Dependence <a href="https://nodejs.org">Node.js</a> run.</div>
    </div>
    
</div>

<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.js"></script>
<script>
$('.warpper .page-toc ul ul li a').on('click',function(){
  $('.warpper .page-toc ul ul li a').removeClass('my-active')
  $(this).addClass('my-active')
})
  // if (!$('.understand-me').length) {
  //   var bar = $(window).height() - $('.navbar ').height() - $('.page-toc').position().top;
  //   var count = bar / 26 / 2;
  //   var barHeight = $('.page-toc').outerHeight();
  //   $('.page-toc li').eq(0).children('a').addClass('red');
  //   var arr = [];
  //   $("h1,h2,h3,h4,h5,h6").each(function () {
  //     arr.push($(this).position().top);
  //   });
  //   var timer
  //   function dark() {
  //     clearTimeout(timer)
  //      timer = setTimeout(function () {
  //      var top = Math.abs($('.page-toc > ul').position().top);
  //      var cur = $('.content').scrollTop();
  //      for (var i = arr.length; i >= 0; i--) {
  //        if (arr[i] <= cur) {
  //          break;
  //        }
  //      }
  //      if (i === -1) {
  //        i = 0;
  //      }
  //      $('.page-toc li a').removeClass('red');
  //      $('.page-toc li').eq(i).children('a').addClass('red');
  //      let height = $('.page-toc li').eq(i).position().top-$('.page-toc').height(); // 如果当前的offset出去了 回到中间可好？
  //      $('.page-toc').scrollTop(height+$('.page-toc').height()/2);
  //    },200)
  //   }

  //   $('.content').on('scroll', dark);
  // }
</script>
<style>

    /* ::-webkit-scrollbar{width:14px;}
    ::-webkit-scrollbar-track{background-color:transparent;}
    ::-webkit-scrollbar-thumb{background-color:transparent;}
    ::-webkit-scrollbar-thumb:hover {background-color:transparent}
    ::-webkit-scrollbar-thumb:active {background-color:transparent} */

    .page-toc > ul .red {
        background: #f3f3f3;
        z-index: 1;
        border-left: 3px solid #009a61;
        -webkit-transition: all .2s ease;
        transition: all .2s ease;
        color: #000
    }





</style>
</body>
</html>
